#include "settingwindow.h"
#include "ui_settingwindow.h"

settingWindow::settingWindow(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::settingWindow)
{
    ui->setupUi(this);
    init();
}

settingWindow::~settingWindow()
{
    //saveAndSync();
    emit reloadSettings();
    delete ui;
}

void settingWindow::init(){
    settings = new QSettings("conf.ini",QSettings::IniFormat);
    ui->maskWidget->clear();
    ui->savedList->clear();
    ui->latWidget->clear();
    webitems.clear();
    latparam.clear();

    QCompleter *completer = new QCompleter(this);
    QDirModel *dirmodel = new QDirModel(completer);
    dirmodel->setFilter(QDir::NoDotAndDotDot | QDir::Dirs);

    completer->setModel( dirmodel );
    ui->tmpEdit->setCompleter(completer);
    ui->catalogEdit->setCompleter(completer);


    loadSettings();
}

//сохранение всех параметров
void settingWindow::saveAndSync(){
    settings->setIniCodec("utf-8");
    //сохраняем маски файлов
    settings->beginGroup("MaskFilter");
    QStringList *mask;
    mask = new QStringList();
    for ( int i=0; i<ui->maskWidget->count(); i++ ){
       mask->append( ui->maskWidget->item(i)->text() );
    }
    settings->setValue("mask", QVariant(mask->join("|")).toString() );
    settings->endGroup();

    //сохраняем каталоги
    settings->beginGroup("Paths");
    settings->setValue("catalogPath", QVariant(ui->catalogEdit->text()).toString() );
    settings->setValue("tmpPath", QVariant(ui->tmpEdit->text()).toString() );
    settings->endGroup();

    //сохраняем пункты HTTP поиска
    settings->beginWriteArray("WebPreset");
    for ( int i=0; i<webitems.size(); ++i ){
      settings->setArrayIndex(i);
      settings->setValue("name", QVariant( webitems.at(i).name ) );
      settings->setValue("URL", QVariant( webitems.at(i).url ).toString() );
      settings->setValue("files", QVariant( webitems.at(i).files ).toString() );
      //qDebug()<<webitems.at(i).name;
    }
    settings->endArray();

    //сохраняем пункты широт
    settings->beginWriteArray("CityLat");
    for ( int i=0; i<latparam.size(); ++i ){
      settings->setArrayIndex(i);
      settings->setValue("name", QVariant( latparam.at(i).name ) );
      settings->setValue("lat", QVariant( latparam.at(i).value.toInt() ) );
    }
    settings->endArray();

    settings->sync();
}

//загрузка параметров из файла
void settingWindow::loadSettings(){

    settings->setIniCodec("utf8");

    //загружаем маски файлов
    settings->beginGroup("MaskFilter");
    ui->maskWidget->addItems( settings->value("mask").toString().split("|") );
    settings->endGroup();

    //загружаем каталоги
    settings->beginGroup("Paths");
    ui->catalogEdit->setText( settings->value("catalogPath").toString() );
    ui->tmpEdit->setText( settings->value("tmpPath").toString() );
    settings->endGroup();

    //загружаем пункты HTTP поиска
    int sizeWeb;
    sizeWeb = settings->beginReadArray("WebPreset");
    for ( int i=0; i<sizeWeb; ++i ){
      settings->setArrayIndex(i);
      WebItem item;
      item.name = settings->value("name").toString();
      item.url = settings->value("URL").toString();
      item.files = settings->value("files").toString();
      webitems.append(item);
      ui->savedList->addItem( item.name );
    }
    settings->endArray();

    //загружаем пункты широт
    int sizeLat;
    sizeLat = settings->beginReadArray("CityLat");
    for ( int i=0; i<sizeLat; ++i ){
      settings->setArrayIndex(i);
      ParamManag item;
      item.name = settings->value("name").toString();
      item.value = settings->value("lat").toString();
      latparam.append(item);
      ui->latWidget->addItem( item.name );
    }
    settings->endArray();


    //ui->maskWidget
    //ui->maskEdit

}

//закрытие
void settingWindow::on_closeButton_clicked()
{
   saveAndSync();
   this->close();
}
//выбор айтема в масках
void settingWindow::on_maskWidget_itemClicked(QListWidgetItem *item)
{
  ui->maskEdit->setText( item->text() );
}
//удаление масок
void settingWindow::on_removeMaskButton_clicked()
{
    if ( ui->maskWidget->selectedItems().size()>0 ){
        qDeleteAll( ui->maskWidget->selectedItems() );
    }
    ui->maskWidget->setFocus();
}
//очищение масок
void settingWindow::on_clearButton_clicked()
{
  ui->maskWidget->clear();
}
//добавление масок
void settingWindow::on_addMaskButton_clicked()
{
  QString *text;
  text = new QString(ui->maskEdit->text());
  if ( ui->maskWidget->findItems( *text,Qt::MatchWrap ).size()==0 ){
     ui->maskWidget->addItem( ui->maskEdit->text() );
  }
}
void settingWindow::on_maskEdit_returnPressed()
{
    this->on_addMaskButton_clicked();
}


//удаление WEB
void settingWindow::on_delButton_clicked()
{
    if ( ui->savedList->selectedItems().size()>0 ){
        qDeleteAll( ui->savedList->selectedItems() );
        QString text;
        //удаляем из памяти
        for ( int i=0; i < webitems.size(); i++ ){
            text = webitems.at(i).name;
            if ( ui->savedList->findItems( text,Qt::MatchWrap ).size()==0 )
                webitems.removeAt(i);
        }
    }
    ui->savedList->setFocus();
}
//добавление WEB
void settingWindow::on_addButton_clicked()
{
    QString *text;
    text = new QString(ui->nameEdit->text());
    if ( !ui->httpEdit->text().isEmpty()&&
         !ui->nameEdit->text().isEmpty()&&
         !ui->filesEdit->text().isEmpty()&&
         ui->savedList->findItems( *text,Qt::MatchWrap ).size()==0){
        WebItem item;
        item.name = ui->nameEdit->text();
        item.files = ui->filesEdit->text();
        item.url = ui->httpEdit->text();
        webitems.append(item);
        ui->savedList->addItem( ui->nameEdit->text() );
    }
}
//нажатие на айтем WEB
void settingWindow::on_savedList_itemClicked(QListWidgetItem *item)
{
    QString name;
    name = item->text();
    for ( int i=0; i<webitems.size();i++ ){
        if ( webitems.at(i).name==name ){
            ui->httpEdit->setText( webitems.at(i).url );
            ui->filesEdit->setText( webitems.at(i).files );
            ui->nameEdit->setText( webitems.at(i).name );
        }
    }
}
//смена фокуса
void settingWindow::on_httpEdit_returnPressed()
{
   ui->nameEdit->setFocus();
   ui->nameEdit->selectAll();
}
//смена фокуса
void settingWindow::on_nameEdit_returnPressed()
{
    ui->filesEdit->setFocus();
    ui->filesEdit->selectAll();
}
//добавление WEB
void settingWindow::on_filesEdit_returnPressed()
{
   on_addButton_clicked();
}
//сохранить изменения
void settingWindow::on_pushButton_clicked()
{
    if ( ui->savedList->selectedItems().size()>0 ){
      QString name;
      name = ui->savedList->selectedItems().first()->text();
      for ( int i=0; i<webitems.size();i++ ){
          if ( webitems.at(i).name==name ){
              WebItem item;
              item.url = ui->httpEdit->text();
              item.files = ui->filesEdit->text();
              item.name = ui->nameEdit->text();
              webitems.replace( i,item );
          }
      }
      ui->savedList->selectedItems().first()->setText( ui->nameEdit->text() );
    }
}

//перемещение пункта вниз
void settingWindow::on_movedownButton_clicked()
{
    if ( ui->savedList->selectedItems().size()>0 ){
        int nCurRow;
        nCurRow = ui->savedList->row(ui->savedList->selectedItems().first());
        //qDebug()<<nCurRow << webitems.size();
        if ( nCurRow+1 < webitems.size()  ){
          QListWidgetItem *curItem =  ui->savedList->takeItem(nCurRow);
          ui->savedList->insertItem( nCurRow + 1, curItem );
          ui->savedList->setCurrentRow(nCurRow+1);
          webitems.move(nCurRow,nCurRow+1);
        }
    }
}

//перемещение пункта вверх
void settingWindow::on_moveupButton_clicked()
{
    if ( ui->savedList->selectedItems().size()>0 ){
        int nCurRow;
        nCurRow = ui->savedList->row(ui->savedList->selectedItems().first());
        if ( nCurRow > 0  ){
          QListWidgetItem *curItem =  ui->savedList->takeItem(nCurRow);
          ui->savedList->insertItem( nCurRow - 1, curItem );
          ui->savedList->setCurrentRow(nCurRow-1);
          webitems.move(nCurRow,nCurRow-1);
        }
    }
}

/**
 * нажатие на кнопку добавления широты
 * @brief settingWindow::on_addLatButton_clicked
 */
void settingWindow::on_addLatButton_clicked()
{
    QString *text;
    text = new QString(ui->latNameEdit->text());
   if (!ui->latNameEdit->text().isEmpty() ){
    if ( ui->latWidget->findItems( *text,Qt::MatchWrap ).size()==0){
        ParamManag item;
        item.name = ui->latNameEdit->text();
        item.value = QString("%1").arg(ui->latSpinBox->value());
        latparam.append(item);
        ui->latWidget->addItem( *text );
    }else{

    }

   }//endif empty
}

/**
 * Нажатие на кнопку удаления широты
 * @brief settingWindow::on_removeLatButton_clicked
 */
void settingWindow::on_removeLatButton_clicked()
{
    if ( ui->latWidget->selectedItems().size()>0 ){
        qDeleteAll( ui->latWidget->selectedItems() );
        QString text;
        //удаляем из памяти
        for ( int i=0; i < webitems.size(); i++ ){
            text = latparam.at(i).name;
            if ( ui->latWidget->findItems( text,Qt::MatchWrap ).size()==0 )
                latparam.removeAt(i);
        }
    }
    ui->latWidget->setFocus();
}

/**
 * выбор широты
 * @brief settingWindow::on_latWidget_itemClicked
 * @param item
 */
void settingWindow::on_latWidget_itemClicked(QListWidgetItem *item)
{
    QString name;
    name = item->text();
    for ( int i=0; i<latparam.size();i++ ){
        if ( latparam.at(i).name==name ){
            ui->latSpinBox->setValue( latparam.at(i).value.toInt() );
            ui->latNameEdit->setText( latparam.at(i).name );
        }
    }
}
